<!--
  ~ Licensed to the Apache Software Foundation (ASF) under one
  ~ or more contributor license agreements.  See the NOTICE file
  ~ distributed with this work for additional information
  ~ regarding copyright ownership.  The ASF licenses this file
  ~ to you under the Apache License, Version 2.0 (the
  ~ "License"); you may not use this file except in compliance
  ~ with the License.  You may obtain a copy of the License at
  ~
  ~   http://www.apache.org/licenses/LICENSE-2.0
  ~
  ~ Unless required by applicable law or agreed to in writing,
  ~ software distributed under the License is distributed on an
  ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  ~ KIND, either express or implied.  See the License for the
  ~ specific language governing permissions and limitations
  ~ under the License.
-->

<nz-input-group
  [nzSearch]="type === 'search'"
  [nzPrefixIcon]="prefixIcon || (type === 'search' ? 'search' : undefined)"
  [nzSuffixIcon]="suffixIcon"
  [nzPrefix]="prefixTpl"
  [nzSuffix]="suffixTpl"
  [nzSize]="size"
  [style]="groupStyle"
>
  <input
    nz-input
    [id]="id || ''"
    [type]="passwordVisible ? 'text' : type"
    [name]="name || ''"
    [style]="inputStyle || ''"
    [required]="required || false"
    [readonly]="readonly || false"
    [disabled]="disabled || false"
    [placeholder]="placeholder || ''"
    [(ngModel)]="value"
    (ngModelChange)="onChange($event)"
  />
</nz-input-group>

<ng-template #prefixTpl>
  <ng-container *ngIf="prefix; else noPrefixContent">
    <ng-template [ngTemplateOutlet]="prefix"></ng-template>
  </ng-container>
  <ng-template #noPrefixContent></ng-template>
</ng-template>

<ng-template #suffixTpl>
  <ng-container *ngIf="suffix; else noSuffixContent">
    <ng-template [ngTemplateOutlet]="suffix"></ng-template>
  </ng-container>
  <ng-template #noSuffixContent>
    @if (type === 'password') {<i
      nz-icon
      [nzType]="passwordVisible ? 'eye-invisible' : 'eye'"
      (click)="passwordVisible = !passwordVisible"
    ></i>
    } @if (allowClear && value) {
    <i nz-icon class="ant-input-clear-icon" nzTheme="fill" nzType="close-circle" (click)="onClear($event)"></i>
    }
  </ng-template>
</ng-template>
